home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / Feelin021015 / Examples / Menus.e < prev    next >
Encoding:
Text File  |  2002-10-28  |  4.6 KB  |  142 lines

  1. OPT PREPROCESS
  2.  
  3. MODULE 'feelin','libraries/feelin','a4'
  4.  
  5. PROC main()
  6.    DEF c,w,m,m1,m2,m3,cntxt,label
  7.  
  8.    sys_SGlob()
  9.  
  10.    IF feelinbase := OpenLibrary('feelin.library',FV_VERSION)
  11.       m := Menu('Project'),
  12.          Child, Item('Clear'), End,
  13.          Child, Item('New'), End,
  14.          Child, ItemSeparator,
  15.  
  16.          Child, m1 := Menu('Load'),
  17.             Child, Item('Reload'), End,
  18.             Child, ItemSeparator,
  19.             Child, Item('Open...'), End,
  20.             Child, Item('Open New...'), End,
  21.             Child, ItemSeparator,
  22.             Child, Item('Insert...'), End,
  23.             Child, Item('Append...'), End,
  24.             Child, ItemSeparator,
  25.             Child, Item('Load Session...'), End,
  26.          End,
  27.  
  28.          Child, m2 := Menu('Save'),
  29.             Child, Item('Save'), End,
  30.             Child, Item('Save As...'), End,
  31.             Child, ItemSeparator,
  32.             Child, Item('Save Session...'), End,
  33.          End,
  34.  
  35.          Child, Item('Iconify'), End,
  36.          Child, Item('`bQuit'),   FA_ID,"QUIT", End,
  37.          Child, ItemSeparator,
  38.  
  39.          Child, m3 := Menu('Many levels'),
  40.             Child, Item('Item 1.1'),End,
  41.             Child, Menu('Menu 1.2'),
  42.                Child, Item('Item 2.1'), End,
  43.                Child, Item('Item 2.2'), End,
  44.                Child, Menu('Menu 2.3'),
  45.                   Child, Menu('Menu 3.1'),
  46.                      Child, Item('Item 4.1'), End,
  47.                      Child, Item('Item 4.2'), End,
  48.                      Child, Item('Item 4.3'), End,
  49.                   End,
  50.  
  51.                   Child, Item('Item 3.2'), End,
  52.                End,
  53.             End,
  54.             Child, Item('Item 1.3'), End,
  55.          End,
  56.       End
  57.  
  58.       IF m
  59.          c := ClientObject,
  60.             Child, w := WindowObject, FA_Window_Title, 'Feelin : Menus', FA_ContextMenu,m, FA_UserData,'Window',
  61.                Child, VGroup, NoFrame,
  62.                   Child, TextObject,
  63.                          FA_ChainToCycle,          FALSE,
  64.                          FA_FixedHeight,           TRUE,
  65.                          FA_TextDisplay_Interline, 2,
  66.                          FA_Text, '`cHere, all `<8>ContextMenus`<0> are children of\na big `<8>Menu`<0> (also used by the window).\n`i`Se`SsSo good for Monica !!`Sn`n\nLuckely you only have to listen\nto your `<8>Client`<0> to know everything\n about the whole menu.\n`i`Se`SsHummm, even better.`n`Sn\nMore over, `<8>multiselection`<0> is handled magically.',
  67.                          End,
  68.  
  69.                   Child, BarTitle('Taste my context'),
  70.  
  71.                   Child, VGroup, FA_Group_HSpacing, 0, FA_Group_VSpacing, 0,
  72.                      Child, TextObject, DontChain, TextFrame, TextBack, FA_ContextMenu, m, FA_Text,'`c`SeComplete Menu', FA_Text_VCenter, TRUE, FA_UserData,'Complete', End,
  73.  
  74.                      Child, HGroup, FA_Group_HSpacing, 0, FA_Group_VSpacing, 0,
  75.                         Child, TextObject, DontChain, TextFrame, TextBack, FA_ContextMenu, m1, FA_Text, '`c`SeLoad Menu', FA_Text_VCenter, TRUE, FA_UserData, 'Load Menu', End,
  76.                         Child, TextObject, DontChain, TextFrame, TextBack, FA_ContextMenu, m2, FA_Text, '`c`SeSave Menu', FA_Text_VCenter, TRUE, FA_UserData, 'Save Menu', End,
  77.                      End,
  78.  
  79.                      Child, TextObject, DontChain, TextFrame, TextBack, FA_ContextMenu, m3, FA_Text,'`c`SeMany Levels', FA_Text_VCenter, TRUE, FA_UserData, 'Levels', End,
  80.                   End,
  81.  
  82.                   Child, BarTitle('Menu Selection(s)'),
  83.  
  84.                   Child, VGroup, StringFrame,StringBack, FA_FixedHeight,TRUE, FA_Group_VSpacing,2,
  85.                      Child, cntxt := TextObject,DontChain, FA_Back, FI_Dark, FA_Text_PreParse,'`c`<1>', FA_Text_VCenter,TRUE, FA_Text_SetMin,TRUE, FA_Text_Static,FALSE, End,
  86.                      Child, label := TextObject,DontChain, FA_Back, FI_Dark, FA_Text_PreParse,'`c`<1>', FA_Text_VCenter,TRUE, FA_Text_SetMin,TRUE, FA_Text_Static,FALSE, End,
  87.                   End,
  88.                End,
  89.             End,
  90.          End
  91.  
  92.          IF c
  93.             F_DoA(c,FM_Notify,[FA_Menu_Action,
  94.                                FV_Notify_Always,FV_Notify_Self, 5,
  95.                                FM_CallDispatcher,{disp_menu},FV_Notify_Value,label,cntxt])
  96.  
  97.             F_DoA(w,FM_Notify,[FA_Window_CloseRequest,TRUE,FV_Notify_Client, 2,FM_Client_ReturnID,FV_Client_Quit])
  98.             F_Set(w,FA_Window_Open,TRUE)
  99.  
  100.             F_DoA(c,FM_Client_Run,NIL)
  101.  
  102.             F_DisposeObj(c)
  103.          ENDIF
  104.  
  105.          F_DisposeObj(m)
  106.       ENDIF
  107.  
  108.       CloseLibrary(feelinbase)
  109.    ENDIF
  110. ENDPROC
  111.  
  112. PROC disp_menu(client=A0:PTR TO feelinObject,args=A1:PTR TO LONG)
  113.    DEF menu:PTR TO feelinObject,label:PTR TO feelinObject,cntxt:PTR TO feelinObject,
  114.        next:PTR TO feelinObject,node:PTR TO FS_SelectedNode,str[80]:STRING,mul=FALSE
  115.  
  116.    sys_RGlob()
  117.  
  118.    menu  := args[0]
  119.    label := args[1]
  120.    cntxt := args[2]
  121.  
  122.    IF node := F_Get(menu,FA_Menu_Owner)
  123.       StringF(str,'`<8>ContextOwner`<1> 0x\h - \a\s\a',node,F_Get(node,FA_UserData))
  124.       F_Set(cntxt,FA_Text,str)
  125.    ELSE
  126.       F_Set(cntxt,FA_Text,'No Context')
  127.    ENDIF
  128.  
  129.    IF next := F_Get(menu,FA_Menu_Selected)
  130.       IF next.next
  131.          F_Set(label,FA_Text,'`<8>!! Multiple !!`<1>') ; mul := TRUE
  132.       ENDIF
  133.  
  134.       WHILE node := F_NextObject({next})
  135.          IF mul THEN Delay(50)
  136.          IF F_Get(node.object,FA_ID) = "QUIT" THEN F_DoA(client,FM_Client_ReturnID,[FV_Client_Quit])
  137.          StringF(str,'`<8>Item`<1> 0x\h - `<8>Title`<1> \s',node.object,F_Get(node.object,FA_Item_Title))
  138.          F_Set(label,FA_Text,str)
  139.       ENDWHILE
  140.    ENDIF
  141. ENDPROC
  142.